package com.lengyu.vxminiprogram.common;

import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.io.Serializable;

@Data
public class HttpResultDto<T> implements Serializable {
    private int code;

    private String msg;

    private HttpResultStatus status;

    private T data;

    public static <T> HttpResultDto<T> success(){
        HttpResultDto dto = new HttpResultDto();
        dto.setStatus(HttpResultStatus.SUCCESS);
        return dto;
    }

    public static <T> HttpResultDto<T> success(T data){
        HttpResultDto dto = new HttpResultDto();
        dto.setStatus(HttpResultStatus.SUCCESS);
        dto.setData(data);
        return dto;
    }

    public static <T> HttpResultDto<T> success(String message, T data){
        HttpResultDto dto = new HttpResultDto();
        dto.setStatus(HttpResultStatus.SUCCESS);
        if (StringUtils.isNotBlank(message)){
            dto.setMsg(message);
        }
        dto.setData(data);
        return dto;
    }
    public static <T> HttpResultDto<T> failed(HttpResultStatus httpResultStatus){
        HttpResultDto dto = new HttpResultDto();
        dto.setStatus(httpResultStatus);
        return dto;
    }

    public static <T> HttpResultDto<T> failed(HttpResultStatus httpResultStatus,String msg){
        HttpResultDto dto = new HttpResultDto();
        dto.setStatus(httpResultStatus);
        dto.setMsg(msg);
        return dto;
    }
    public static <T> HttpResultDto<T> failed(String message, T data){
        HttpResultDto dto = new HttpResultDto();
        dto.setStatus(HttpResultStatus.FAILED);
        dto.setMsg(message);
        dto.setData(data);
        return dto;
    }

    public static <T> HttpResultDto<T> failed(String message){
        HttpResultDto dto = new HttpResultDto();
        dto.setStatus(HttpResultStatus.FAILED);
        dto.setMsg(message);
        return dto;
    }

    public static <T> HttpResultDto<T> failed(){
        HttpResultDto dto = new HttpResultDto();
        dto.setStatus(HttpResultStatus.FAILED);
        return dto;
    }

    public void setStatus(HttpResultStatus httpResultStatus){
        this.status = httpResultStatus;
        this.code = httpResultStatus.getCode();
        this.msg = httpResultStatus.getMsg();
    }
}
